package gold.gold01;

import java.util.HashSet;

/**
 * 判断字符是否唯一
 * .toCharArray()是一个比较好的遍历String的方法, 返回的是char[]
 * 单行代码解决: return astr.chars().distinct().count() == astr.length();
 */
public class S0101字符串是否唯一 {
    /**
     * 即使使用这种单纯的暴力法, 也可以得到100, 6的较好的结果
     */
    public boolean isUnique(String astr) {
        boolean result = false;
        HashSet<Character> set = new HashSet<>();
        for(Character c: astr.toCharArray()){
            if(!set.contains(c)){
                set.add(c);
            }else{
                result = true;
                break;
            }
        }
        return result;
    }
    //试一下位运算, 对于这题而言没有提高, 数据种类多的话存map的数组就要大, 种类少的话非常快就能遇到重合的点


    /**
     * 100, 就没有汉字的字符, 还是可以直接当数字用的
     */
    public boolean isUnique2(String astr) {
        if(astr == null) return false;
        if(astr.length() == 0) return true;
        char[] chars = astr.toCharArray();
        boolean[] record = new boolean[128];
        for(char c: chars){
            if(record[c])
                return false;
            record[c] = true;
        }
        return true;

    }
}
